package com.hifar.test.entrust.service;


import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hifar.plat.baseModal.pojo.BaseOssFiles;
import com.hifar.sys.BusiResponse;
import com.hifar.test.entrust.pojo.HfEnvEntrust;
import com.hifar.test.entrust.pojo.VO.*;

/**
 * <p>
 * 委托单 服务类
 * </p>
 *
 * @author wei
 * @since 2024-12-04 15:51:56
 */
public interface IHfEnvEntrustService extends IService<HfEnvEntrust> {
    /**
     * 复制委托单
     * @param id    委托单id
     */
    void copyById(String id);

    /**
     * 委托单完成
     * @param id    委托单id
     */
    void entrustFinish(String id);

    /**
     * 导出Excel
     * @param queryWrapper
     * @return
     */
    BusiResponse exportExcel(QueryWrapper<HfEnvEntrust> queryWrapper);

    /**
     * 删除委托单及流程
     * @param idList
     */
    void deleteAndFlowByIds(List<String> idList);

    /**
     * 查询委托单详情
     * @param mainId
     * @return
     */
    HfEnvEntrustSaveVO queryHfEnvEntrustVO(String mainId);

    /**
     * 委托单下发
     * @param entrustId
     */
    void issued(String entrustId);
    /**
     * 查询委托详情
     * @param id
     * @return
     */
    HfEnvEntrustSaveVO queryVOById(String id);

    /**
     * 委托单保存
     * @param hfEnvEntrustSaveVO
     * @return
     */
    HfEnvEntrust saveEntrust(HfEnvEntrustSaveVO hfEnvEntrustSaveVO);

    /**
     * 调试系统新增委托
     * @param hfEnvEntrustDebugSaveVO
     * @return
     */
    HfEnvEntrust saveDebugEntrust(HfEnvEntrustDebugSaveVO hfEnvEntrustDebugSaveVO);

    /**
     * 委托列表查询VO
     * @param page
     * @param queryWrapper
     * @return
     */
    Page<HfEnvEntrustVO> pageVO(Page<HfEnvEntrustVO> page, QueryWrapper<HfEnvEntrustVO> queryWrapper);

    /**
     * 补充试验条件
     * @param supplementConditionsVO
     */
    void supplementConditions(SupplementConditionsVO supplementConditionsVO);


    /**
     * 保存委托附件
     *
     * @param hfEnvEntrustSaveFileVO
     */
    void saveEntrustFile(HfEnvEntrustSaveFileVO hfEnvEntrustSaveFileVO);

    /**
     * 查询委托附件
     *
     * @param id 委托id
     * @return
     */
    List<BaseOssFiles> queryEntrustFile(String id);

    /**
     * 生成委托单二维码文件(pdf版)
     * @param id 委托单id
     */
    void generateQrCodeFile(String id);

    /**
     * 生成委托单二维码文件(word版)
     * @param id 委托id
     */
    String generateQrCodeFile2(String id);

    /**
     * 查询审核提交信息
     *
     * @param id
     * @return
     */
    HfEnvEntrustSaveVO querySubmitEntrustVO(String id);

    /**
     * 同步处理委托状态
     */
    void syncEntrustStatus();

    /**
     * 报告生成选择列表 查询委托下任务 任务下试验
     * @param entrustId
     * @return
     */
    List<HfEnvReportTaskVO> queryEntrustTaskList(String entrustId);

    /**
     * 生成委托单数据包文件
     * @param id
     */
    void generatePackageData(String id);


    /**
     * 作废委托
     *
     * @param id 委托id
     */
    void cancel(String id);

    /**
     * 校验当日排量限制
     *
     * @param entrustTime   委托日期
     * @param unitTypeCode  类型编码(1-气候 2-力学)
     * @param id           委托单ID(编辑时传入，用于排除自身)
     * @return BusiResponse 校验结果
     */
    BusiResponse validateDailyDisplacement(Date entrustTime, String unitTypeCode, String id);
}
